home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_08 / 1008069a < prev    next >
Text File  |  1992-05-27  |  2KB  |  55 lines

  1. /*
  2. Postman's Sort (R) Version 1.0
  3. Copyright (c) Robert Ramey 1991. All Rights Reserved
  4. */
  5. #include "stack.h"
  6. /*********************************************************************
  7. data structure and data for each data memory held in memory or in
  8. the working file
  9. **********************************************************************/
  10. /* structure for a record */
  11. typedef union {
  12.     size_t field[1];        /* displacement of fields with in record */
  13.     unsigned char data[1];    /* actual record data */
  14. } RECORD;
  15.  
  16. /* The usage of a RECORD is as follows:
  17.     field[0]    Total length of record
  18.     field[1]    displacement of first field
  19.     ...
  20.     field[n]    displacement of n th field
  21.     blk num        one character containing block number
  22.     num data    bytes added to permit sorting of numerics
  23.                 starts at data_offset
  24.     byte data    data contained in record
  25.                 starts at record_offset
  26. */
  27. extern size_t record_size;
  28. extern size_t record_offset;
  29. extern STACK *d_stack;
  30.  
  31. #define blk_offset        (record_offset-1)
  32. /* data[blk_offset] will contain one of three fields
  33.  * depending on what state the record is currently in:
  34.  */
  35. /* when record is stored in stack memory, it contains the number */
  36. /* of the stack frame */
  37. #define rec_frame(ra)     (ra->data[blk_offset])
  38. /* when it is stored on disk it contains a flag indicating that is */
  39. /* is the last record in a chain for the current sublist */
  40. #define rec_eob(ra)     (ra->data[blk_offset])
  41. /* after the record has been retrieved but before it has been attached */
  42. /* to a new sublist or sent to output this field contains a flag indicating */
  43. /* its provenance.  */
  44. #define rec_memflag(ra) (ra->data[blk_offset])
  45. #define rec_size(ra) (ra->field[0])
  46.  
  47. void
  48. rec_init(int, char **);
  49. RECORD *
  50. rec_variable();
  51. RECORD *
  52. rec_fixed();
  53. void
  54. rec_output(RECORD *);
  55.